<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of UsuarioBO
 *
 * @author Dellano
 */

require_once 'Application_Filter_CleanHTML.php';

class UsuarioBO {
    //put your code here

    public function autenticarUsuario ($email, $senha)
    {
        try
        {
            if ($this->validarEntradas ($this->filtrarEntrada($email), $this->filtrarEntrada($senha)));
            {   
                $auth = Zend_Auth::getInstance ();
                $authAdapter = $this->getAuthAdapter ($email, $senha);
                $result = $auth->authenticate ($authAdapter);
                
                switch ($result->getCode())
                {
                    case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:

                        return array('resultado'=>'false', 'mensagem'=>"Email Incorreto ou inesistente!");

                    case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:

                        return array('resultado'=>'false', 'mensagem'=>"Senha Incorreta!");

                    case Zend_Auth_Result::SUCCESS:
                        $storage = new Zend_Auth_Storage_Session();
                        $storage->write($authAdapter->getResultRowObject());
                        return array('resultado'=>'true', 'mensagem'=>"Autenticacao bem sucedida!");

                    default:

                        return array('resultado'=>'false', 'mensagem'=>"Email ou Senha incorretos!");
                }
            }
        }
        catch (Exception $e)
        {
            die($e->getMessage());
        }

        


    }

    private function validarEntradas ($email, $senha)
    {
        $emailValidators = new Zend_Validate ();
        $senhaValidators = new Zend_Validate ();

        $emailValidators->addValidator(new Zend_Validate_EmailAddress ())
                        ->addValidator(new Zend_Validate_NotEmpty ());

        $senhaValidators->addValidator(new Zend_Validate_Alnum ())
                        ->addValidator(new Zend_Validate_NotEmpty ());
        
        if (!$emailValidators->isValid ($email)) // valida a entrada de email
        {
            foreach ($emailValidators->getMessages () as $message)
                $erros .= "$message\n";

            throw new Exception($erros);
        }
        elseif (!$senhaValidators->isValid ($senha))// valida a entrada de senha
        {
            foreach ($senhaValidators->getMessages () as $message)
                $erros .= "$message\n";

            throw new Exception($erros);
        }
        else
        {
            return true;
        }

        return false;

    }

    private function filtrarEntrada($entrada)
    {
        $filtros = new Zend_Filter();
        $filtros ->addFilter( new Application_Filter_CleanHTML())
                            ;

       //filtra a entrada
        return $filtros->filter($entrada);
    }

    public function getAuthAdapter($email, $senha)
    {   
        $db = Zend_Db_Table::getDefaultAdapter();

        $adapter = new Zend_Auth_Adapter_DbTable ($db);
        
        $adapter->setTableName('usuario');
        $adapter->setIdentityColumn('email');
        $adapter->setCredentialColumn('senha');
        $adapter->setCredentialTreatment('password');
        $adapter->setIdentity($email);
        $adapter->setCredential($senha);

        return $adapter;
    }
}
?>
